﻿using System;
using System.Windows.Controls.Primitives;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Data;
using produccion.clases;
using System.ComponentModel;
using System.IO;
using System.Diagnostics;
using produccion.vistamodelo;
using produccion.reportes;
using System.Threading;
using System.Globalization;

namespace produccion.forms
{
    /// <summary>
    /// Lógica de interacción para FrmInventarioProductoEnProcesoPorLinea.xaml
    /// </summary>
    public partial class FrmConsumosRealesYTeoricosDeMateriales : Window
    {
        #region FJRF - VARIABLES GENERIAS DE TODO EL FORMULARIO
        MDOgeneral MdoGeneral = new MDOgeneral();//FJRF - Traemos toda la informacion y funciones de MdoGeneral

        DataTable DtConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        DataSet DsConsulta;//FJRF - Usamos este DataTable para hacer consultas generales
        String StrConsulta;//FJRF - Usamos este DataTable para hacer consultas generales

        DataTable DtEncabezadoYParametros;//FJRF - Usamos este DataTable para hacer consultas generales del os encabezados mas los parametros
        DataSet DsImprimir;//FJRF - Usamos este dataset para la impresion de consultas

        DataTable DtConsumosRealesYTeoricosDeMateriales;//FJRF - Usamos este DataTable para hacer consultas 
        DateTime DttFecha = new DateTime();//FJRF - Creamos una variable que nos maneje la fecha

        //String StrRutaReporteCrystalReport = @"C:\produccion\produccion\reportes\";//FJRF - Esta es la ruta de los reportes de crystal reports
        String StrRutaReporteCrystalReport = @"reportes\";//FJRF - Esta es la ruta de los reportes de crystal reports

        #endregion

        #region FJRF - EVENTOS DEL FORMULARIO
        public FrmConsumosRealesYTeoricosDeMateriales()
        {
            InitializeComponent();
        }

        private void WinInventarioProductoEnProcesoPorLinea_Loaded(object sender, RoutedEventArgs e)
        {
            #region FJRF - Configuracion basica  del modulo

            //FJRF - CON ESTO GARANTIZAMOS QUE LAS FECHAS SIEMPRE VENDRAN EN ESTE FORMATO DE DIA/MES/AÑO
            System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");//FJRF - Con esto aseguramos que la base de datos reciba los numeros como se deben recibir
            Thread.CurrentThread.CurrentCulture = (CultureInfo)Thread.CurrentThread.CurrentCulture.Clone();
            Thread.CurrentThread.CurrentCulture.DateTimeFormat.ShortDatePattern = "dd/MM/yyyy";

            string strTituloVentana = "CONSUMOS REALES Y TEORICOS DE MATERIALES" + " - USUARIO:" + MDOgeneral.usuario + "- [FrmConsumosRealesYTeoricosDeMateriales]";//FJRF - Armamos el titulo de la ventana
            Title = strTituloVentana;//FJRF - Ponemos el titulo de la ventana

            DttFecha = DateTime.Now;//FJRF - Establecemos la fecha actual
            //DtpFechaInicial.SelectedDate = new DateTime(DttFecha.Year, DttFecha.Month, 1);//FJRF - Obtenemos el primer dia del mes
            //DtpFechaFinal.SelectedDate = new DateTime(DttFecha.Year, DttFecha.Month + 1, 1).AddDays(-1); ;//FJRF - Obtenemos el ultimo dia del mes

            DtpFechaInicial.SelectedDate = new DateTime(DttFecha.Year, 1, 1);//FJRF - Obtenemos el primer dia del mes
            DtpFechaFinal.SelectedDate = new DateTime(DttFecha.Year, DttFecha.Month + 1, 1).AddDays(-1); ;//FJRF - Obtenemos el ultimo dia del mes

            TxtCodigoMaterial.Style = null;//FJRF - Le quitamos el estilo al objeto para controlar el foco

            //DtpFechaInicial.Style = null;//FJRF - Le quitamos el estilo al objeto para controlar el foco
            //DtpFechaFinal.Style = null;//FJRF - Le quitamos el estilo al objeto para controlar el foco

            BtnBuscarMaterialPorPedido.Style = null;//FJRF - Le quitamos el estilo al objeto para controlar el foco
            BtnProcesarDatos.Style = null;//FJRF - Le quitamos el estilo al objeto para controlar el foco

            #endregion

            TxtCodigoMaterial.Focus();
        }
        private void TxtCodigoMaterial_TextChanged(object sender, TextChangedEventArgs e)
        {
            if (TxtCodigoMaterial.Text.Length == 10)//FJRF - Si el codigo tiene los 10 digitos hacemos lo siguiente
            {
                StrConsulta = "SELECT NOMBREMATERIAL FROM VIS_MAEMTP WHERE CODIGOMATERIAPRIMA = '" + TxtCodigoMaterial.Text + "' ";//FJRF - Armamos la consulta
                DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos el nombre del codigo digitado

                if (DtConsulta.Rows.Count > 0)//FJRF - Si se recueraron datos hacemos lo siguiente
                {
                    LblNombreDelMaterial.Content = DtConsulta.Rows[0][0].ToString();//FJRF - Enviamos el dato
                }
                else//FJRF - Si el dato no existe hacemos lo siguiente
                {
                    BtnBuscarMaterialPorPedido.Focus();//FJRF - Lo mandamos a que buesque la materia prima
                }
            }
            else//FJRF - Si no tiene la longitud correcta hacemos lo siguiente
            {
                PttV_Limpiar();//FJRF - Limpiamos los datos
            }
        }

        private void TxtCodigoMaterial_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.Key == Key.Enter)//FJRF - Si presiona enter hacemos lo siguiente
            {
                if (TxtCodigoMaterial.Text.Length == 10)//FJRF - Si el codigo tiene los 10 digitos hacemos lo siguiente
                {
                    if (LblNombreDelMaterial.Content.ToString() == ".")//FJRF - Si se digito el codigo hacemos lo siguiente
                    {
                        StrConsulta = "SELECT NOMBREMATERIAL FROM VIS_MAEMTP WHERE CODIGOMATERIAPRIMA = '" + TxtCodigoMaterial.Text + "' ";//FJRF - Armamos la consulta
                        DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos el nombre del codigo digitado

                        if (DtConsulta.Rows.Count > 0)//FJRF - Si se recueraron datos hacemos lo siguiente
                        {
                            LblNombreDelMaterial.Content = DtConsulta.Rows[0][0].ToString();//FJRF - Enviamos el dato
                        }
                        else//FJRF - Si el dato no existe hacemos lo siguiente
                        {
                            BtnBuscarMaterialPorPedido.Focus();//FJRF - Lo mandamos a que buesque la materia prima
                        }
                    }
                    else//FJRF - Si se busco y trajo el nombre hacemos lo siguiente
                    {
                        DtpFechaInicial.Focus();//FJRF - Pasamos el foco a la primera fecha
                    }
                }
                else//FJRF - Pero si no tiene la longitud correcta hacemos lo siguiente
                {
                    BtnBuscarMaterialPorPedido.Focus();//FJRF - Lo mandamos a que buesque la materia prima
                }
            }
            else
            {
                if (TxtCodigoMaterial.Text.Length == 10)//FJRF - Si el codigo tiene los 10 digitos hacemos lo siguiente
                {
                    StrConsulta = "SELECT NOMBREMATERIAL FROM VIS_MAEMTP WHERE CODIGOMATERIAPRIMA = '" + TxtCodigoMaterial.Text + "' ";//FJRF - Armamos la consulta
                    DtConsulta = MdoGeneral.consulta(StrConsulta);//FJRF - Buscamos el nombre del codigo digitado

                    if (DtConsulta.Rows.Count > 0)//FJRF - Si se recueraron datos hacemos lo siguiente
                    {
                        LblNombreDelMaterial.Content = DtConsulta.Rows[0][0].ToString();//FJRF - Enviamos el dato
                    }
                    else//FJRF - Si el dato no existe hacemos lo siguiente
                    {
                        BtnBuscarMaterialPorPedido.Focus();//FJRF - Lo mandamos a que buesque la materia prima
                    }
                }
            }
        }

        private void DtgConsumosRealesYTeoricosDeMateriales_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e)
        {
            string strNombreColumna = "";//FJRF - Variable para saber el nombre de la columna
            strNombreColumna = e.Column.Header.ToString();//FJRF - Extraemos el nombre de la columna

            if (strNombreColumna == "PARES" || strNombreColumna == "ESTANDAR" || strNombreColumna == "CANTIDADREAL" || strNombreColumna == "DIFERENCIA")//FJRF - Si alguna de las columnas tiene este nombre hacemos lo siguiente
            {
                Style MyStyleTextAlignmentProperty = new Style(typeof(DataGridCell));//FJRF - Creamos un nuevo estilo para la celda
                MyStyleTextAlignmentProperty.Setters.Add(new Setter(TextBlock.TextAlignmentProperty, TextAlignment.Right));//FJRF - Alineamos los datos de la celda a la derecha

                (e.Column as DataGridTextColumn).Binding.StringFormat = "{0:##,#0.##}";//FJRF - Enviamos el formato a la celda
                (e.Column as DataGridTextColumn).CellStyle = MyStyleTextAlignmentProperty;//FJRF - Asignamos el estilo creado
            }
            if (e.PropertyType == typeof(System.DateTime))//FJRF - Estas son las columnas que tendran el formato de fecha
            {
                (e.Column as DataGridTextColumn).Binding.StringFormat = "dd/MM/yyyy";//FJRF - Asignamos el formato a la fecha
            }
            e.Column.IsReadOnly = true;//FJRF - Inavilita las columnas para que no se pueda escribir sobre ella
        }
        private void BtnFiltrarOExportarAExcel_Click(object sender, RoutedEventArgs e)
        {
            try//FJRF - Validamos el proceso de impresion 
            {
                if (DtConsumosRealesYTeoricosDeMateriales == null)//FJRF - Validamos que el reporte tenga datos para realizar el proceso de impresion
                {
                    Msgbox("PROCESO CANCELADO", "No existen datos para imprimir el reporte", MessageBoxButton.OK, MessageBoxImage.Error); //FJRF - Informamos al usuario
                }
                else//FJRF - Si trae datos hacemos lo siguiente
                {
                    FrmAyudasGenericas FrmAyudas = new FrmAyudasGenericas();//FJRF - Creamos una variable que maneje las propiedades del formulario que vamos a invocar
                    FrmAyudas.pStrTituloVentana_Opcional = "CONSUMOS REALES Y TEORICOS DE MATERIALES";//FJRF - Le enviamos un titulo personalizado al formulario

                    FrmAyudas.pDtDatosRecibidosConInformacion = DtConsumosRealesYTeoricosDeMateriales.Copy();//FJRF - Enviamos los datos sacando una copia de los datos

                    //FrmAyudas.pStrConsultaSql_Obligatorio = StrConsulta;//FJRF - Armamos la consulta
                    FrmAyudas.pStrCampoCodigoDeLaTabla_Obligatorio = "ORDEN";//FJRF - Le decimos que este es el campo codigo o llave debe tener el nombre final osea el alias si es q lo tiene
                    FrmAyudas.pStrBuscarPorDefectoEnElCampo_Opcional = "NROPEDIDO";//FJRF - Asignamos el dato a buscar
                    FrmAyudas.pBooQuitarBotonRetornar_Opcional = true;//FJRF - Quitamos el boton de retornar datos
                    FrmAyudas.pBooPonerBotonExportarExcel_Opcional = true;//FJRF - Activamos el boton para que se le permita la exportacion de datos a excel

                    String StrColumnasParaFormato = "PARES, ESTANDAR, CANTIDADREAL, DIFERENCIA ";//FJRF - Columnas para formato numerico
                    FrmAyudas.pStrNombreColumnasParaFormatoNumericoSeparadoPorComas_Opcional = StrColumnasParaFormato;//FJRF - Enviamos las columnas que se le van a hacer formato numerico

                    FrmAyudas.ShowDialog();//FJRF - Invocamos el formulario
                }
            }
            catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO - [Error del sistema]", ex.Message.ToString(), MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
            }
        }

        private void BtnProcesarImprimir_Click(object sender, RoutedEventArgs e)
        {
            try//FJRF - Validamos el proceso de impresionrptResumenPorLinea.rpt
            {
                String StrRutaReporteAImprimir = StrRutaReporteCrystalReport + "rptConsumosRealesYTeoricosDeMateriales.rpt";//FJRF - Armamos la ruta completa donde estara el reporte
                if (System.IO.File.Exists(StrRutaReporteAImprimir) == true)//FJRf - Si el reporte existe hacemos lo siguiente
                {
                    #region FJRF - ImprimimosElReporte
                    if (DtConsumosRealesYTeoricosDeMateriales == null)//FJRF - Validamos que el reporte tenga datos para realizar el proceso de impresion
                    {
                        Msgbox("PROCESO CANCELADO", "No existen datos para imprimir el reporte", MessageBoxButton.OK, MessageBoxImage.Error); //FJRF - Informamos al usuario
                    }
                    else//FJRF - Si trae datos hacemos lo siguiente
                    {
                        CargarParametrosImpresion();//FJRF - Cargamos los parametros para la impresion, esto contiene titulo y parametros enviados al cystalreport

                        DsImprimir = new DataSet("DsConsumosRealesYTeoricosDeMateriales");//FJRF - DataSet que esta vinculado al CrystalReport

                        //FJRF - ADICIONAMOS LAS TABLAS QUE NECESITE EL DATASET ASOCIADO AL CRYSTAL
                        DsImprimir.Tables.Add(DtEncabezadoYParametros.Copy());//Encabezado Informe

                        DtConsumosRealesYTeoricosDeMateriales.TableName = "DtDatosReporte";//FJRF - Le damos nombre a la tabla
                        DsImprimir.Tables.Add(DtConsumosRealesYTeoricosDeMateriales.Copy());//Detalle del Informe

                        produccion.reportes.Vista vista = new produccion.reportes.Vista { ds = DsImprimir, reporte = StrRutaReporteAImprimir };//FJRF - Enviamos los datos para que se imprima el reporte
                        vista.Show();//FJRF - Ejecutamos el reporte para que se muestre visualmente
                    }
                    #endregion
                }
                else//FJRF - Si el reporte no existe hacemos lo siguiente
                {
                    Msgbox("PROCESO CANCELADO", "El reporte no existe en la ruta: [" + StrRutaReporteAImprimir + "] por favor comuniquese con el administrador del sistema para que corriga este inconveniente.", MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
                }
            }
            catch (Exception ex)//FJRF - Si se presenta algun error hacemos lo siguiente
            {
                Msgbox("PROCESO CANCELADO - [Error del sistema]", ex.Message.ToString(), MessageBoxButton.OK, MessageBoxImage.Error);//FJRF - Enviamos un mensaje al usuario
            }
        }
        private void BtnBuscarMaterialPorPedido_Click(object sender, RoutedEventArgs e)
        {
            PttV_RetornaMateriaPrima();//FJRF - Buscamos la materia prima
        }
        private void BtnProcesarDatos_Click(object sender, RoutedEventArgs e)
        {
            PttV_Procesar();//FJRF - Procesamos los datos
        }
        private void btnSalir_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
        #endregion


        #region FJRF - FUNCIONES Y PROCEDIMIENTOS DEL FORMULARIO
        protected void PttV_Procesar()
        {
            if (TxtCodigoMaterial.Text.Trim().Length == 10)//FJRF - Si el codigo es de 10 digitos hacemos lo siguiente
            {
                if (LblNombreDelMaterial.Content.ToString() == ".")
                {
                    Msgbox("PROCESO CANCELADO", "No hay un codigo de material correcto para procesar los datos", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                }
                else
                {
                    EjecutarSp_SP_CONSUMOREALTEORICO(TxtCodigoMaterial.Text, DtpFechaInicial.SelectedDate.Value, DtpFechaFinal.SelectedDate.Value);//FJRF - Procesamos los datos

                    //StrConsulta = "SELECT NROORD_TMP AS ORDEN,  CODREF_TMP AS CODIGO,  NOMREF_TMP AS REFERENCIA,  CANPRO_TMP AS PARES,  CANSTA_TMP AS ESTANDAR,  CANREA_TMP AS CANTIDADREAL,  CANDIF_TMP AS DIFERENCIA FROM TMPCONREATEO ";//FJRF - Aramos la consulta

                    StrConsulta = "SELECT UPPER(NROORD_TMP) AS ORDEN,  FECORD_EOP AS FECHAORDEN, UPPER(NROPED_EOP) AS NROPEDIDO, UPPER(CODCLI_EOP) AS CODCLI, UPPER(NOMCLI_CLI) AS CLIENTE, UPPER(CODREF_TMP) AS CODREF,  UPPER(NOMREF_TMP) AS REFERENCIA,  CANPRO_TMP AS PARES,  CANSTA_TMP AS ESTANDAR,  CANREA_TMP AS CANTIDADREAL,  CANDIF_TMP AS DIFERENCIA  ";//FJRF - Armamos los campos
                    StrConsulta = StrConsulta + "FROM TMPCONREATEO, VIS_ENCORDP ";//FJRF - de las siguientes tablas
                    StrConsulta = StrConsulta + "WHERE NROORD_TMP = NROORD_EOP ";
                    StrConsulta = StrConsulta + "ORDER BY FECORD_EOP ";

                    DtConsumosRealesYTeoricosDeMateriales = MdoGeneral.consulta(StrConsulta);//FJRF - Traemos los datos consultados
                    DtgConsumosRealesYTeoricosDeMateriales.ItemsSource = DtConsumosRealesYTeoricosDeMateriales.DefaultView;//FJRF - Mostramos los datos

                    #region FJRF - Extraemos los parametros que retorna
                    String StrInventarioActual = MDOgeneral.spComando.Parameters["pnu_invact"].Value.ToString();//FJRF - Extraemos los parametros que retorna el sp
                    String StrEntradas = MDOgeneral.spComando.Parameters["pnu_entradas"].Value.ToString();//FJRF - Extraemos los parametros que retorna el sp

                    if (StrInventarioActual == null)//FJRF - Si la variable llega nula hacemos lo siguiente
                    {
                        StrInventarioActual = "0";//FJRF - Enviamos un cero por defecto
                    }
                    else//FJRF - Si no llega nula hacemos lo siguiente
                    {
                        if (StrInventarioActual.Trim() == "")//FJRF - Verificamos que no traiga un vacio y si lo trae hacemos lo siguiente
                        {
                            StrInventarioActual = "0";//FJRF - Enviamos un cero por defecto
                        }
                        else
                        {
                            if (StrInventarioActual == "null")//FJRF - Si la variable llega nula hacemos lo siguiente
                            {
                                StrInventarioActual = "0";//FJRF - Enviamos un cero por defecto
                            }
                        }
                    }

                    if (StrEntradas == null)//FJRF - Si la variable llega nula hacemos lo siguiente
                    {
                        StrEntradas = "0";//FJRF - Enviamos un cero por defecto
                    }
                    else//FJRF - Si no llega nula hacemos lo siguiente
                    {
                        if (StrEntradas.Trim() == "")//FJRF - Verificamos que no traiga un vacio y si lo trae hacemos lo siguiente
                        {
                            StrEntradas = "0";//FJRF - Enviamos un cero por defecto
                        }
                        else
                        {
                            if (StrEntradas == "null")//FJRF - Si la variable llega nula hacemos lo siguiente
                            {
                                StrEntradas = "0";//FJRF - Enviamos un cero por defecto
                            }
                        }
                    }
                    #endregion

                    LblInventarioActual.Content = Double.Parse(StrInventarioActual);//FJRF - visualizamos los datos
                    LblInventarioActual.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}

                    LblEntradas.Content = Double.Parse(StrEntradas);//FJRF - visualizamos los datos
                    LblEntradas.ContentStringFormat = "{0:##,#0.##}";//FJRF - Se aplica un formato sin decimales si se quiere con decimales aplicamos este {0:c}
                }
            }
            else
            {
                Msgbox("PROCESO CANCELADO", "No hay un codigo de material correcto para procesar los datos", MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
            }
        }

        private void EjecutarSp_SP_CONSUMOREALTEORICO(String Str_pva_codmtp, DateTime Dtt_pdt_desde, DateTime Dtt_pdt_hasta)//FJRF - Este procedimiento ejecuta un sp
        {
            try
            {
                MDOgeneral.spComando.CommandText = "SP_CONSUMOREALTEORICO";
                MDOgeneral.spComando.Connection = MDOgeneral.conexion;
                MDOgeneral.spComando.CommandType = CommandType.StoredProcedure;
                MDOgeneral.spComando.Parameters.Clear();

                //Input
                MDOgeneral.spComando.Parameters.Add("pva_codmtp", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = Str_pva_codmtp;
                MDOgeneral.spComando.Parameters.Add("pdt_desde", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = Dtt_pdt_desde.ToShortDateString();
                MDOgeneral.spComando.Parameters.Add("pdt_hasta", Oracle.DataAccess.Client.OracleDbType.Varchar2, 40).Value = Dtt_pdt_hasta.ToShortDateString();

                //Output salidas
                MDOgeneral.spComando.Parameters.Add("pnu_invact", Oracle.DataAccess.Client.OracleDbType.Double).Direction = ParameterDirection.Output;
                MDOgeneral.spComando.Parameters.Add("pnu_entradas", Oracle.DataAccess.Client.OracleDbType.Double).Direction = ParameterDirection.Output;

                MDOgeneral.spComando.Parameters.Add("pva_result", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;
                MDOgeneral.spComando.Parameters.Add("pva_errusu", Oracle.DataAccess.Client.OracleDbType.Varchar2, 2000).Direction = ParameterDirection.Output;

                MDOgeneral.spComando.ExecuteNonQuery();
            }
            catch (Exception ex) 
            {
                MessageBox.Show(ex.Message, "PROCESO CANCELADO",MessageBoxButton.OK, MessageBoxImage.Stop);//FJRF - Enviamos un mensaje al usuario
                throw (ex);
            }
        }

        protected void PttV_RetornaMateriaPrima()
        {
            String StrCodigoMateriaPrima, StrNombreMateriaPrima = "";//FJRF - Variable que retornara la materia prima

            FrmAyudasGenericas FrmAyudas = new FrmAyudasGenericas();//FJRF - Creamos una variable que maneje las propiedades del formulario que vamos a invocar
            FrmAyudas.pStrTituloVentana_Opcional = "CONSULTA DE MATERIALES POR PEDIDO";//FJRF - Le enviamos un titulo personalizado al formulario

            StrConsulta = "SELECT CODIGOMATERIAPRIMA,  CODIGOMATERIAL,  NOMBREMATERIAL,  CODIGOCOLOR,  NOMBRECOLOR,  CODIGOGRUPO,  NOMBREGRUPO,  CODIGOSUBGRUPO,  NOMBRESUBGRUPO,  CODIGOBARRAS,  EXISTENCIA FROM VIS_MAEMTP ";//FJRF - Armamos la consulta

            FrmAyudas.pStrConsultaSql_Obligatorio = StrConsulta;//FJRF - Armamos la consulta
            FrmAyudas.pStrCampoCodigoDeLaTabla_Obligatorio = "CODIGOMATERIAPRIMA";//FJRF - Le decimos que este es el campo codigo o llave debe tener el nombre final osea el alias si es q lo tiene
            FrmAyudas.pStrBuscarPorDefectoEnElCampo_Opcional = "NOMBREMATERIAL";//FJRF - Asignamos el dato a buscar

            String StrColumnasParaFormato = "EXISTENCIA ";//FJRF - Columnas para formato numerico
            FrmAyudas.pStrNombreColumnasParaFormatoNumericoSeparadoPorComas_Opcional = StrColumnasParaFormato;//FJRF - Enviamos las columnas que se le van a hacer formato numerico

            FrmAyudas.ShowDialog();//FJRF - Invocamos el formulario

            if (FrmAyudas.DtDatosRetornados == null)//FJRF - Si no trae nada hacemos lo siguiente
            {
                StrCodigoMateriaPrima = "";//FJRF - Retornamos vacio
                StrNombreMateriaPrima = ".";//FJRF - Retornamos vacio
            }
            else//FJRF - Si trae datos entonces hacemos lo siguiente
            {
                if (FrmAyudas.DtDatosRetornados.Rows.Count > 0)//FJRF - Si el objeto trae filas entonces hacemos lo siguiente
                {
                    StrCodigoMateriaPrima = FrmAyudas.DtDatosRetornados.Rows[0]["CODIGOMATERIAPRIMA"].ToString().Trim();//FJRF - Buscamos el dato seleccionado;
                    StrNombreMateriaPrima = FrmAyudas.DtDatosRetornados.Rows[0]["NOMBREMATERIAL"].ToString().Trim();//FJRF - Buscamos el dato seleccionado;
                }
                else//FJRF - Si no es nulo pero no trae filas hacemos lo siguiente
                {
                    StrCodigoMateriaPrima = "";//FJRF - Retornamos vacio
                    StrNombreMateriaPrima = ".";//FJRF - Retornamos vacio
                }
            }
            TxtCodigoMaterial.Text = StrCodigoMateriaPrima;//FJRF - cargamos los datos encontrados
            LblNombreDelMaterial.Content = StrNombreMateriaPrima;//FJRF - cargamos los datos encontrados

            TxtCodigoMaterial.Focus();//FJRF - Ponemos el foco en el objeto
        }
        protected void PttV_Limpiar()
        {
            LblEntradas.Content = "0";//FJRF - Limpiamos los datos
            LblInventarioActual.Content = "0";//FJRF - Limpiamos los datos

            LblNombreDelMaterial.Content = "";//FJRF - Limpiamos los datos

            DtgConsumosRealesYTeoricosDeMateriales.ItemsSource = null;//FJRF - Desvinculamos el objeto
            DtgConsumosRealesYTeoricosDeMateriales.Items.Clear();//FJRF - Limpiamos los datos del grid

            DtConsumosRealesYTeoricosDeMateriales = null;//FJRF - Borramos los datos consultados
        }

        #region FJRF - CajaDeTextoMsgbox
        protected void Msgbox(String StrCaption, String StrMensaje, MessageBoxButton MsbTipoBoton, MessageBoxImage MsbTipoImagenIcono)
        {
            MessageBoxButton buttons;
            buttons = MsbTipoBoton;

            MessageBoxImage icon = MsbTipoImagenIcono;
            MessageBox.Show(StrMensaje, StrCaption, buttons, icon);
        }
        #endregion

        private void DtgConsumosRealesYTeoricosDeMateriales_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            try
            {
                if (DtgConsumosRealesYTeoricosDeMateriales.SelectedItem == null)//FJRF - Si no hay algun pedido seleccionado hacemos lo siguiente
                    return;//FJRF - Nos salimos

                DataRowView dr = DtgConsumosRealesYTeoricosDeMateriales.SelectedItem as DataRowView;//FJRF - Cargamos un DataRowView con el dato seleccionado
                DataRow dr1 = dr.Row;//FJRF - Asignamos las finas
                String StrNumeroOrdenSeleccionada = Convert.ToString(dr1.ItemArray[0]);//FJRF - Decimos que en la columna cero nos traiga el dato de la fila seleccionada

                FRMconsordens _co = new FRMconsordens();
                _co.texOrd.Text = StrNumeroOrdenSeleccionada;
                _co.texPed.Text = "0";
                _co.texRef.Text = "";
                _co.comCli.SelectedIndex = -1;
                _co.comCol.SelectedIndex = -1;
                _co.comSub.SelectedItem = -1;
                _co.datePicker1.SelectedDate = Convert.ToDateTime("01/01/" + DateTime.Now.Year.ToString());
                _co.filtraOrd();
                _co.ShowDialog();
            }
            catch (Exception ex)//FJRF - Si pasa un error hacemos lo siguiente
            {
                MessageBox.Show(ex.Message);//FJRF - Mostramos el error en pantalla
            }
        }

        private void CargarParametrosImpresion()
        {
            #region FJRF - CreamosLasColmnasDelEncabezado
            DtEncabezadoYParametros = new DataTable("DtEncabezadoYParametros");//FJRF - Creamos la tabla que contendra el encabezado del informe

            //FJRF - CREAMOS LAS COLUMNAS DE LOS PARAMETROS A ENVIAR
            DtEncabezadoYParametros.Columns.Add("Empresa", System.Type.GetType("System.String"));//FJRF - Este es el nombre de la empresa
            DtEncabezadoYParametros.Columns.Add("TituloReporte", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("CodigoMaterial", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("NombreMaterial", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("FechaInicial", System.Type.GetType("System.DateTime"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("FechaFinal", System.Type.GetType("System.DateTime"));//FJRF - El titulo que tendra el reporte

            DtEncabezadoYParametros.Columns.Add("InventarioActual", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte
            DtEncabezadoYParametros.Columns.Add("Entradas", System.Type.GetType("System.String"));//FJRF - El titulo que tendra el reporte
            #endregion

            #region FJRF - AsignamosEnLasColmnasDelEncabezadoLosValores

            DataRow drEncabezadoYParametros;//FJRF - Creamos un manejador de filas para el DataTable actual

            drEncabezadoYParametros = DtEncabezadoYParametros.NewRow();//FJRF - Agregamos una nueva fila
            //FJRF - ASIGNAMOS LOS VALORES
            drEncabezadoYParametros["Empresa"] = MDOgeneral.strEmpresaImprime;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["TituloReporte"] = "CONSUMOS REALES Y TEORICOS DE MATERIALES";//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["CodigoMaterial"] = TxtCodigoMaterial.Text;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["NombreMaterial"] = LblNombreDelMaterial.Content;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["FechaInicial"] = DtpFechaInicial.SelectedDate;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["FechaFinal"] = DtpFechaFinal.SelectedDate;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            drEncabezadoYParametros["InventarioActual"] = LblInventarioActual.Content;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario
            drEncabezadoYParametros["Entradas"] = LblEntradas.Content;//Enviamos el parametro que requerimos cargar este parametro varia segun la necesidad del formulario

            DtEncabezadoYParametros.Rows.Add(drEncabezadoYParametros);//FJRF - Agregamos a la tabla el registro creado
            DtEncabezadoYParametros.TableName = "DtEncabezadoYParametros";//FJRF - Le damos un nombre a la tabla creada para poder verla en el DataSet
            #endregion
        }



        #endregion




    }
}

